package gdr.player;

import gdr.dev.Formula;

/**
 * Classe che rappresenta un personaggio evocato da qualcuno.
 * @author Giorgio Vitale
 *
 */
@SuppressWarnings("serial")
public class DefaultSummonedPlayer extends DefaultPlayer{
	protected DefaultPlayer summoner;

	public DefaultPlayer getSummoner() {
		return summoner;
	}

	public void setSummoner(DefaultPlayer summoner) {
		this.summoner = summoner;
	}
	
	public int getLevel(){
		return summoner.getLevel();
	}
	
	/**
	 * Restituisce il valore di una statistica
	 * @param stat
	 * @return
	 */
	public long getMaxStat(int stat){
		return Formula.getStat(stat, summoner.getLevel(), baseStat.getStat(stat), incrementStat.getStat(stat), 0, 0);
	}
	
	/**
	 * Aumenta l'esperienza del personaggio
	 * @param exp
	 * @return true se aumentando l'esperienza si effettua un levelup
	 */
	public boolean gainExperience(long exp)
	{	return summoner.gainExperience(exp);
	}
	
	/**
	 * Aumenta l'esperienza fisica e magica del personaggio
	 * @param esperienzaFisica
	 * @param esperienzaMagica
	 */
	public void gainExperience(long esperienzaFisica, long esperienzaMagica){
		java.util.logging.Logger log = java.util.logging.Logger.getLogger("log.battle");
		log.fine("Esperienza totale: EXP fisica:"+esperienzaFisica+" EXP magica: "+esperienzaMagica);
		long sumExpFis = 0;
		if (esperienzaFisica>0)
			sumExpFis = Math.max(1, 2*esperienzaFisica/3);
		esperienzaFisica -=sumExpFis;
		long sumExpMag = 0;
		if (esperienzaMagica>0)
			sumExpMag = Math.max(1, 2*esperienzaMagica/3);
		esperienzaMagica -=sumExpMag;
		summoner.gainExperience(esperienzaFisica, esperienzaMagica);
		super.gainExperience(sumExpFis, sumExpMag);
	}
	
	
}
